package com.fyy.java8.lambda;

import java.util.Comparator;
import java.util.function.Consumer;

/**
 * @Author fyy
 * @Description Lambda表达式使用举例
 * @Date 2021/2/22 9:42
 */
public class LambdaTest {

    /**
     * @Author fyy
     * @Description 不使用Lambda
     */
    public static void test1(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我要上春晚");
            }
        };
        r1.run();
        System.out.println("******************************");
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1,o2);
            }
        };
        System.out.println(com1.compare(12,21));
    }

    /**
     * @Author fyy
     * @Description 使用Lambda
     */
    public static void test2(){
        Runnable r1 = () -> System.out.println("我要上春晚2");
        r1.run();
        System.out.println("******************************");
        Comparator<Integer> com1 = (o1,o2) -> Integer.compare(o1,o2);
        System.out.println(com1.compare(21,12));

        System.out.println("*******方法引用***************");
        Comparator<Integer> com2 = Integer :: compare;
        System.out.println(com2.compare(21,12));
    }

    /** @Description 格式一：无参、无返回值 */
    public static void geshi1(){
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("我要上春晚");
            }
        };
        //使用lombda表达式
        Runnable r2 = () -> System.out.println("我要上春晚2");
    }

    /** @Description 格式二：需要一个参数、无返回值 */
    public static void geshi2(){
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        //使用lombda表达式
        Consumer<String> con1 = (String s) -> System.out.println(s);
    }

    /** @Description 格式三：需要一个参数、无返回值，类型可以省略 */
    public static void geshi3(){
        //使用lombda表达式,不省略类型
        Consumer<String> con1 = (String s) -> {
            System.out.println(s);
        };
        //使用lombda表达式,省略类型即类型推断
        Consumer<String> con2 = (s) -> System.out.println(s);
    }

    /** @Description 格式四：需要一个参数、无返回值，参数小括号可以省略 */
    public static void geshi4(){
        //使用lombda表达式
        Consumer<String> con2 = s -> System.out.println(s);
    }

    /** @Description 格式五：两个或以上参数、多条执行语句，有返回值 */
    public static void geshi5(){
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                return Integer.compare(o1,o2);
            }
        };
        //使用lombda表达式
        Comparator<Integer> com2 = (o1,o2) -> {
            System.out.println(o1);
            return Integer.compare(o1,o2);
        };
    }

    /** @Description 格式六：只有一条执行语句，大括号和return都可以省略 */
    public static void geshi6(){
        //使用lombda表达式
        Comparator<Integer> com2 = (o1,o2) -> Integer.compare(o1,o2);
    }


}
